微信小程序 您所在的位置:网站首页 微信小程序 网络异常 微信小程序

微信小程序

2024-07-13 11:39| 来源: 网络整理| 查看: 265

自己琢磨的处理方法,如有缺陷,非常欢迎提出,我们共同进步

大概思路:

请求连接失败 --> 检查失败原因(请求超时? 网络异常?其他?) --> 直接提示用户

请求连接成功-->  非token问题( code报200,500等 )  -->  正常流程走

                     -->  token问题( code报token异常约定的code时,我们用的是700,701 )

                             --> 自动触发登陆接口,

                                  登陆接口返回正常,将token异常的这个请求重新发送,若请求再异常,走正常流程,不再触发登陆.

                                  登陆接口返回异常,反馈给token异常的这个请求函数,走正常流程,该提示的提示,该干嘛干嘛.

 

代码

// 一个需要检测token异常的请求 const getUserAppointment = (status, success, fail, complete,loginRequestNum) => { loginRequestNum = loginRequestNum ? loginRequestNum : 0; // token失效时,反复请求的次数 // 请求前检查token存在与否 ,避免无谓的请求 loginCheck(login => { if (login) { wx.request({ url: url + '/user/piAppointment', method: 'POST', header: { 'Authorization': 'Bearer ' + wx.getStorageSync('loginInfo').token }, data: { "status": status }, success: function (res) { if (res.data.code != 701 && res.data.code != 700) { success ? success(res) : '' }else{ if (loginRequestNum < 1) { loginRequestNum = loginRequestNum + 1; tokenRefreshCheck(res.data.code, checkResult => { if (checkResult) { // 返回true 说明重新登陆成功 getUserAppointment(status, success, fail, complete,loginRequestNum) } else { // 返回false,说明重新登陆失败,直接返回用户信息 success ? success(res) : '' } }); } else { // 已重新登陆过一次,token依旧失效,不再做登录请求,直接返回用户信息 success ? success(res) : '' } } }, fail: function (res) { fail ? fail(res) : ''; // 检查请求连接失败原因 requestFail(res); }, complete: function (res) { complete ? complete() : ''; }, }) } }) }; // 连接失败处理函数 const requestFail = (res) => { if (res.errMsg.indexOf('time out') > -1 || res.errMsg.indexOf('timeout') > -1) { wx.showToast({ title: '请求超时,请检查您的网络', icon: 'none' }) } else if (res.errMsg.indexOf('connect error') > -1) { wx.showToast({ title: '当前网络不佳,请稍后重试', icon: 'none' }) } else { wx.showToast({ title: '加载数据失败,请稍后尝试', icon: 'none' }) } }; // 检查请求返回的结果是否为token问题 const tokenRefreshCheck = (code, complete) => { if (code == 701 || code == 700) { // 触发微信自动登录接口 wxLogin(res => { if (res.data.code != 200) { complete ? complete(false) : ''; } else { if (res.data.data.token) { complete ? complete(true) : ''; } else { complete ? complete(false) : ''; } } }, fail => { complete ? complete(false) : ''; }); } }; // 微信自动登录 const wxLogin = (success, fail, complete) => { wx.login({ success: res => { wx.request({ url: url + '/wx/login/jsCode', data: { "jsCode": res.code }, method: 'POST', success: function (res) { if (res.data.code == 200) { wx.setStorageSync("loginInfo", res.data.data); } success ? success(res) : ''; }, fail: function (res) { requestFail(res); fail ? fail(res) : ''; }, complete: function (res) { complete ? complete() : '' } }) } }) }; // 请求前检查是否登录 const loginCheck = (complete)=>{ // token 被发现不存在时,触发重新登录接口,获取token if (!wx.getStorageSync('loginInfo').token){ console.log('触发重新登录接口') // 触发微信自动登录接口 wxLogin(res => { if(res.data.code != 200){ wx.showToast({title: '请求失败', icon: 'none'}) complete ? complete(false) : ''; }else{ if (res.data.data.token){ complete ? complete(true) : ''; app.globalData.loginInfo = res.data.data; }else{ complete ? complete(false) : ''; } } }, fail => { wx.showToast({ title: '请求失败', icon: 'none' }) complete ? complete(false) : ''; }); }else{ complete ? complete(true) : ''; } };

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有